<cfinterface displayname="SudokuSolver" hint="I provide functions that a component can use to solve Sudoku puzzles.">

<cffunction name="init" returntype="ISudokuSolver" access="public" hint="Perform any necessary initialization; must be called before any other methods.">
</cffunction>

<cffunction name="setTermCount" returntype="boolean" access="public" hint="Set the number of terms/digits/letters to be used in the puzzle, returning TRUE for success or FALSE for an unacceptable count." output="false">
	<cfargument name="termCount" type="Numeric" required="true" hint="The number of unique terms/numbers/letters to be used, also the height and width of the puzzle grid and the number of boxes.">
</cffunction>

<cffunction name="setCellBox" returntype="boolean" access="public" hint="Set the box number for a given cell, returning TRUE for success or FALSE for an unacceptable cell/box combination.">
	<cfargument name="rowNum" type="Numeric" required="true" hint="The row number (1..termCount) of the cell">
	<cfargument name="colNum" type="Numeric" required="true" hint="The column number (1..termCount) of the cell">
	<cfargument name="boxNum" type="Numeric" required="true" hint="The box number (1..termCount) of the cell">
</cffunction>

<cffunction name="validateBoxes" returntype="boolean" access="public" hint="Ensure that the adjusted box pattern is acceptable, returning TRUE for acceptable or FALSE for not; must be called after all setCellBox() calls are complete.">
</cffunction>

<cffunction name="clearPuzzle" returntype="void" access="public" hint="Remove all givens and deductions, leaving adjusted boxes intact, resetting the puzzle to an empty state.">
</cffunction>

<cffunction name="addGiven" returntype="boolean" access="public" hint="Add a given term to a cell, returning TRUE for an acceptable value or FALSE for an unacceptable value.">
	<cfargument name="rowNum" type="Numeric" required="true" hint="The row number (1..termCount) of the cell">
	<cfargument name="colNum" type="Numeric" required="true" hint="The column number (1..termCount) of the cell">
	<cfargument name="termNum" type="Numeric" required="true" hint="The term number (1..termcount) given for the cell">
</cffunction>

<cffunction name="solvePuzzle" returntype="query" access="public" hint="Run solving algorithm, returning a query of deductions with columns (ROW,COL,BOX,TERM).">
</cffunction>

</cfinterface>